﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Studio7i.Dominio;

namespace Studio7i.Persistencia.EF
{
    public class SalaDAO : ISalaDAO
    {
        //
        public Sala Crear(Sala salaACrear)
        {
            using (EFContext db = new EFContext(ConexionUtil.ObtenerCadena()))
            {
                int? codigo = db.Salas.Select(l => (int?)l.Codigo).Max();
                salaACrear.Codigo = (codigo ?? 0) + 1;
                db.Salas.Add(salaACrear);
                db.SaveChanges();
            }
            return Obtener(salaACrear.Codigo);
        }
        public Sala Obtener(int codigo)
        {
            using (EFContext db = new EFContext(ConexionUtil.ObtenerCadena()))
            {
                var sala = from l in db.Salas
                            where l.Codigo == codigo
                            select l;
                return sala.SingleOrDefault();
            }
        }
        public Sala Modificar(Sala salaAModificar)
        {
            using (EFContext db = new EFContext(ConexionUtil.ObtenerCadena()))
            {
                Sala sala = db.Salas.Single(l => l.Codigo == salaAModificar.Codigo);
                sala.Nombre = salaAModificar.Nombre;
                sala.Caracteristicas = salaAModificar.Caracteristicas;
                sala.Capacidad = salaAModificar.Capacidad;
                sala.Local = salaAModificar.Local;
                sala.Comentarios = salaAModificar.Comentarios;
                db.SaveChanges();
                return sala;
            }
        }
        public void Eliminar(Sala salaAEliminar)
        {
            using (EFContext db = new EFContext(ConexionUtil.ObtenerCadena()))
            {
                Sala sala = db.Salas.Single(l => l.Codigo == salaAEliminar.Codigo);
                db.Salas.Remove(sala);
                db.SaveChanges();
            }
        }

        //
        public ICollection<Sala> ListarTodos()
        {
            using (EFContext db = new EFContext(ConexionUtil.ObtenerCadena()))
            {
                var resultado = from l in db.Salas
                                select l;
                return resultado.ToList();
            }
        }
        public ICollection<Sala> ListarXBusqueda(int? codigo, string nombre, string caracteristicas, int? capacidad, Local local, string comentarios)
        {
            using (EFContext db = new EFContext(ConexionUtil.ObtenerCadena()))
            {
                var query = from l in db.Salas
                                select l;
                if (codigo != null)
                    query = query.Where(s => s.Codigo == codigo);
                if (nombre != null)
                    query = query.Where(s => s.Nombre.Contains(nombre));
                if (caracteristicas != null)
                    query = query.Where(s => s.Caracteristicas.Contains(caracteristicas));
                if (capacidad != null)
                    query = query.Where(s => s.Capacidad == capacidad);
                if (local != null)
                    query = query.Where(s => s.Local == local);
                if (comentarios != null)
                    query = query.Where(s => s.Comentarios.Contains(comentarios));
                return query.ToList();
            }
        }

    }
}